package com.hhkj.admin.student.mapper;

import com.hhkj.admin.student.domain.Student;
import com.hhkj.admin.student.domain.StudentCourse;
import com.hhkj.admin.student.model.dopo.StudentCourseDo;
import com.hhkj.admin.student.model.dopo.StudentCoursePo;
import com.hhkj.admin.student.model.dopo.StudentPo;
import com.hhkj.admin.student.model.req.StudentBatchReq;
import com.hhkj.admin.student.model.req.StudentCourseReq;
import com.hhkj.admin.student.model.req.StudentReq;
import com.ruoyi.common.base.biz.mapper.BaseMapper;
import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.List;

/**
 * 学员课程信息关联Mapper接口
 *
 * @author ruoyi
 * @since 2023-05-17
 */
@Mapper
@Component
@CacheNamespace
public interface StudentCourseMapper extends BaseMapper<StudentCourse, StudentCourseDo, StudentCoursePo> {
    /**
     * 查询学员课程信息关联
     *
     * @param id 学员课程信息关联主键
     * @return 学员课程信息关联
     */
    StudentCourse selectStudentCourseById(Long id);

    /**
     * 查询学员课程信息关联列表
     *
     * @param studentCourse 学员课程信息关联
     * @return 学员课程信息关联集合
     */
    List<StudentCourse> selectStudentCourseListByDo(StudentCourse studentCourse);

    /**
     * 统计条数
     *
     * @param studentCourse 条件
     * @return
     */
    int countByDo(StudentCourse studentCourse);

    /**
     * 批量修改学员状态
     *
     * @param idList 学员课程主键
     * @param status 要修改为的状态
     */
    void updateBatchStatusByIdList(@Param("list") List<Long> idList, @Param("status") String status);

    /**
     * 清除被设置为‘未审核’状态的学员的到期日期和题库类型
     *
     * @param idList id集合
     */
    void cleanInfoByIdList(@Param("list") List<Long> idList);

    /**
     * 批量修改学员状态(根据学员id)
     *
     * @param studentIdList 学员id主键
     * @param status        要修改为的状态
     */
    void updateBatchStatusByStudentIdList(@Param("list") List<Long> studentIdList, @Param("status") String status);


    /**
     * 批量修改 studentCourse
     *
     * @param idList        学员idList
     * @param studentCourse 学员参数
     */
    void updateStudentCourseByIdList(@Param("idList") List<Long> idList, @Param("condition") StudentCourseReq studentCourse);

    /**
     * 统计批次下全部学员的缴费总金额
     *
     * @param batchId 批次id
     * @return 缴费总金额
     */
    BigDecimal countBatchStudentPrice(@Param("batchId") Long batchId);

    /**
     * 查询批次下学员列表
     *
     * @param studentBatchReq 批次号id
     * @return 学员
     */
    List<StudentPo> listBatchStudentPoByDo(@Param("conditionDo") StudentBatchReq studentBatchReq);

    /**
     * 查询学员信息列表（包含关联表信息）
     *
     * @param studentReq 学员信息
     * @return 学员信息集合
     */
    List<StudentPo> selectStudentRelevancyList(StudentReq studentReq);

    /**
     * 根据条件查询学员科目
     *
     * @param coursePo 参数
     * @return 学员科目集合
     */
    List<StudentCourse> listStudentCoursePoByDo(StudentCoursePo coursePo);

    /**
     * 查询学员科目信息
     * （只返回审核通过的,未设置开始/到期日期的也不显示）
     *
     * @param studentReq 传参
     * @return 学员信息
     */
    List<StudentPo> selectStudentCourseByDo(Student studentReq);

    /**
     * 解绑微信
     *
     * @param studentBatchReq 传参
     * @return 影响行数
     */
    int cancelBind(StudentBatchReq studentBatchReq);

    /**
     * 根据身份证，获取该学员学习的课程
     *
     * @param idCardList
     * @param statusList 状态
     * @return
     */
    List<StudentCourse> listByIdCardList(@Param("idCardList") List<String> idCardList, @Param("statusList") List<String> statusList);

}
